#include"ProducConsumModel.hpp"
#include<time.h>
#include<unistd.h>
//主线程创建一个生产者线程 + 一个消费者线程  让生产者不断生产,消费者不断消费
//由于生产者和消费者都必须看到消费场所,所以把阻塞队列对象作为例程参数传过去
void* product(void* arg)
{
  BlockQueue<int>* bq = (BlockQueue<int>*)arg;
  
  while(1)
  {
    sleep(2);
    int data = rand() % 20;//产生0~19的随机数
    bq->push(data);
    cout << pthread_self() <<" 产生的数据: " << data << endl;
  }
}
void* comsumer(void* arg)
{
  BlockQueue<int>* bq = (BlockQueue<int>*)arg;
  while(1)
  {
    //sleep(2);
    int data = 0;
    bq->pop(&data); 
    cout << pthread_self() <<" 消费的数据: " << data << endl;
  }
}
int main()
{
  srand((unsigned int)time(nullptr));
  BlockQueue<int> bq;
  pthread_t com,pro;
  pthread_create(&com,NULL,comsumer,(BlockQueue<int>*)&bq);
  pthread_create(&pro,NULL,product,(BlockQueue<int>*)&bq);

  //线程等待
  pthread_join(com,NULL);
  pthread_join(pro,NULL);
  return 0;
}
